#include "../header.h"
#include "cJSON.h"

// {
//     "name" : "jack",
//      "age" : 20 ,
//      "weight" : 55.5,
//      "address":
//      {
//         "addr":"changsha",
//         "old":2000
//      }
// }

//想要传递的任何数据，格式做好。
// {
//      "name" : "jack",
//      "info" : "hello" ,
//      "sign" : "all is well",
//      "fuhao" : ">"
//      "address":
//      {
//         "ip":"changsha",
//         "port":10001
//      }
// }


//1.单独测试
//2.联合测试

int main(int argc, char const *argv[])
{
    //json链表节点指针
    cJSON * json_pointer = NULL;
    cJSON * json_addr = NULL;
    cJSON * json_data = NULL;
    
    //创建一个链表数据对象。
    json_pointer = cJSON_CreateObject();
    //添加字符串类型到节点当中
    cJSON_AddStringToObject(json_pointer,"name","jack");
    //添加整型数据
    cJSON_AddNumberToObject(json_pointer,"age",20);
    //添加体重
    cJSON_AddNumberToObject(json_pointer,"weigth",55.5);

    //创建一个新的节点对象 - 把数据添加进去 - 把这个节点对象添加到上面的节点对象当中去。
    json_addr = cJSON_CreateObject();
    //添加字符串-长沙
    cJSON_AddStringToObject(json_addr,"addr","changsha");
    //添加数值 - 历史
    cJSON_AddNumberToObject(json_addr,"old",2000);
    //把新的节点对象添加到上面的节点对象中去
    cJSON_AddItemToObject(json_pointer,"address",json_addr);

    //把所有的数据添加进cjson 链表中。
    //打印所有数据-函数执行结果是一个字符串
    char * str = cJSON_Print(json_pointer);
    printf("要传递的数据是:%s\n",str);
    // //传递
    // send(cid,str,strlen(str));

    //解析：
    cJSON * json_res = NULL;
    cJSON * json_name = NULL;
    cJSON * json_age = NULL;
    cJSON* json_weigth = NULL;

    cJSON* json_address = NULL;
    cJSON* json_addr1 = NULL;
    cJSON * json_old = NULL;
    //调用解析函数
    json_res = cJSON_Parse(str);
    json_name = cJSON_GetObjectItem(json_res,"name");
    json_age = cJSON_GetObjectItem(json_res,"age");
    json_weigth = cJSON_GetObjectItem(json_res,"weigth");
    //解析嵌套对象
    json_address = cJSON_GetObjectItem(json_res,"address");
    json_addr1 = cJSON_GetObjectItem(json_address,"addr");
    json_old = cJSON_GetObjectItem(json_address,"old");
    
    //解析了所有的数据：姓名-年龄-体重-地址-历史时间
    printf("姓名:%s\t年龄:%d\t体重:%.2f\n",json_name->valuestring,json_age->valueint,json_weigth->valuedouble);
    printf("地址:%s\t历史:%d\n",json_addr1->valuestring,json_old->valueint);

    return 0;
}
